Skip to content

ACI recipe pack and related refactors - #292

Draft
zachcasper wants to merge 6 commits into
mainfrom
aci-recipe-pack
Draft

ACI recipe pack and related refactors#292
zachcasper wants to merge 6 commits into
mainfrom
aci-recipe-pack

Conversation

@zachcasper

@zachcasper zachcasper commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

Summary

Reorganize the Recipe Packs and add an Azure Container Instances (ACI) Recipe Pack.

  • Rename recipe-packs/azure/ to recipe-packs/azure-aks/, and name each pack's Bicep file after the pack itself: azure-aks/azure-aks.bicep, kubernetes/default.bicep (was default-recipepack.bicep). The kubernetes file is default.bicep because its Radius.Core/recipePacks resource is named default (the pack rad init installs).
  • Add a new recipe-packs/azure-aci/azure-aci.bicep pack that provisions Radius.Compute/containers on ACI, Radius.Compute/persistentVolumes on Azure Files, and Radius.Security/secrets on Azure Key Vault. ACI-specific recipes only: no data/messaging/storage/AI recipes, and no Environment or parameters.
  • Publish the three ACI Bicep recipes to a dedicated ghcr.io/radius-project/azure-aci-recipes GHCR namespace, since they are Azure recipes rather than kube-recipes.
  • Add a top-level recipe-packs/README.md overview. With the pack file now literally named default.bicep, the "default pack" documentation is reduced to a single concise reference.
  • Fix the resource-type READMEs that linked a non-existent recipe-packs/azure/bicep-recipepack.bicep, and update all other docs, diagrams, and the release workflow to the new names.

Note: the ACI recipe source values use :latest, which only resolves after this merges to main and a stable recipe-pack release publishes the latest tag (same model as the existing packs).

Reason for change

Radius needs an Azure Container Instances option distinct from the AKS-based Azure pack. A single azure/ folder is ambiguous once there are two Azure compute targets, so it is renamed azure-aks and a parallel azure-aci pack is added. Naming each pack Bicep file after the pack/resource (azure-aks.bicep, azure-aci.bicep, default.bicep) makes the file self-describing and lets the default pack drop most of its "this is the default" prose.

Fixes #

Downstream dependency

Two other repos consume these pack paths and must be updated to the final filenames:

  • Align recipe pack references with resource-types-contrib#292 (azure-aks, azure-aci) radius#12662 aligns Radius (the azure-aks/azure-aci pins in deploy/manifest/defaults.yaml and the Azure extension workflow's pack accessor). It was written against the interim aks-recipe-pack.bicep name, so it must be updated to azure-aks.bicep. It merges after this PR and re-pins to this PR's merge SHA. Radius CI (verify-contrib-consumers) rejects non-SHA refs and live-curls the pack file, so it cannot go green until this PR is on main and re-pinned.
  • radius-project/ai-extensions#352 resolves recipe packs at runtime from contrib main (packages/core/src/modeling/recipe-pack.ts, pinned to RECIPE_PACK_REF = "main"). Its provider-to-path map must move to recipe-packs/azure-aks/azure-aks.bicep and recipe-packs/kubernetes/default.bicep (plus tests, testdata, and skill docs), and should merge when this PR lands to avoid 404s.

How to test

  1. Run the release-automation tests (the check CI runs in validate-resource-types.yaml):

    make test-release-automation
  2. In Actions → Release Recipe Pack → Run workflow, confirm the recipe_pack dropdown offers azure-aks, azure-aci, and kubernetes, and that a dry_run for azure-aci resolves a version and builds a bundle without publishing.

  3. Post-merge only: once publish-bicep-recipes.yaml pushes the ACI recipes to ghcr.io/radius-project/azure-aci-recipes and a stable release populates the :latest tag, deploy the pack and reference it from an Environment configured with the Azure provider:

    rad deploy recipe-packs/azure-aci/azure-aci.bicep
    rad env update <env_name> --recipe-packs azure-aci

    Until then the pack's :latest source references do not resolve, so it cannot be deployed directly from this branch.

File change summary

Code changes (need close review)

These change file paths that other repos consume (radius #12662, ai-extensions) or CI behavior.

File Summary of change
recipe-packs/azure/aks-recipepack.biceprecipe-packs/azure-aks/azure-aks.bicep Renamed the folder and the Bicep file (now named after the pack); internal Radius.Core/recipePacks resource renamed from azure-avm to azure-aks. Recipe wiring otherwise unchanged.
recipe-packs/kubernetes/default-recipepack.biceprecipe-packs/kubernetes/default.bicep Renamed the default pack file to default.bicep, matching its default recipePacks resource name. Deployed resource name unchanged.
recipe-packs/azure-aci/azure-aci.bicep (new) New ACI Recipe Pack (azure-aci) wiring containers/persistentVolumes/secrets to ghcr.io/radius-project/azure-aci-recipes/*:latest. No Environment or parameters.
.github/workflows/publish-bicep-recipes.yaml Adds three publish steps that push the ACI recipes to a new ghcr.io/radius-project/azure-aci-recipes GHCR namespace.
.github/workflows/release-recipe-pack.yaml Release recipe_pack input list: replace azure with azure-aks, add azure-aci.

Documentation changes (not impactful)

File Summary of change
recipe-packs/README.md (new) Overview of all Recipe Packs; one concise note that rad init installs kubernetes/default.bicep as the default.
recipe-packs/azure-aci/README.md (new) Documents the ACI pack and how to reference it from an Environment.
recipe-packs/azure-aks/README.md, recipe-packs/kubernetes/README.md, recipe-packs/kubernetes/default.bicep (header comment) Filename/reference updates; trimmed the redundant "default pack" note now that the file is named default.bicep.
README.md, docs/using-resource-types.md, docs/contributing/contributing-resource-types-recipes.md Update folder diagrams, examples, and pack/file references.
Resource-type READMEs (AI/*, Data/*, Messaging/*, Storage/*) Point the Azure recipe link at recipe-packs/azure-aks/azure-aks.bicep (was a broken bicep-recipepack.bicep path) and the Kubernetes link at recipe-packs/kubernetes/default.bicep.
.github/scripts/publish-bicep-recipe.sh, .github/scripts/release/build-recipe-pack-bundle.sh Comment/wording-only updates for the renames.

Signed-off-by: Zach Casper <zachcasper@microsoft.com>
@github-actions

Copy link
Copy Markdown

Dependency Review

✅ No vulnerabilities or license issues or OpenSSF Scorecard issues found.

Scanned Files

None

Resolve conflicts: keep both the rabbitmq (#287) and azure-aci publish steps; adopt main's in-cluster rabbitMQ README table with the renamed pack paths; revert test-release-automation.sh to main (#291) for a consistent fixture convention.

Signed-off-by: Zach Casper <zachcasper@microsoft.com>
@zachcasper
zachcasper marked this pull request as ready for review August 13, 2026 16:05
@zachcasper
zachcasper requested review from a team as code owners August 13, 2026 16:05
Copilot AI lite review requested due to automatic review settings August 13, 2026 16:05

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR reorganizes the repository’s Recipe Packs (renaming the Azure AKS and Kubernetes pack files) and adds a new Azure ACI Recipe Pack, along with doc and workflow updates so the new pack and its recipes can be published and referenced consistently.

Changes:

  • Renamed Azure AKS and Kubernetes recipe-pack paths/filenames and updated internal Radius.Core/recipePacks resource naming.
  • Added a new azure-aci recipe pack (plus README) and updated the publish workflow to push its recipes to ghcr.io/radius-project/azure-aci-recipes.
  • Updated top-level docs and resource-type READMEs to reference the new pack paths and filenames; added a recipe-packs/README.md overview.

Reviewed changes

Copilot reviewed 24 out of 24 changed files in this pull request and generated 6 comments.

Show a summary per file
File Description
Storage/objectStorage/README.md Updates Azure recipe pack link to azure-aks/aks-recipe-pack.bicep.
recipe-packs/README.md Adds a new overview README for available recipe packs and contribution guidance.
recipe-packs/kubernetes/README.md Updates docs to reference kubernetes-recipe-pack.bicep.
recipe-packs/kubernetes/kubernetes-recipe-pack.bicep Updates header and renames the recipe pack resource symbol for clarity.
recipe-packs/azure-aks/README.md Renames Azure pack docs to “Azure AKS” and updates paths/filenames.
recipe-packs/azure-aks/aks-recipe-pack.bicep Renames the pack resource from azure-avm to azure-aks and updates references.
recipe-packs/azure-aci/README.md Adds documentation for the new Azure ACI recipe pack.
recipe-packs/azure-aci/aci-recipe-pack.bicep Adds the new ACI recipe pack wiring containers, persistent volumes, and secrets.
README.md Updates repository structure diagram and default pack references.
Messaging/rabbitMQ/README.md Updates recipe pack links to the renamed AKS and Kubernetes pack files.
Messaging/kafka/README.md Updates Azure recipe pack link to azure-aks/aks-recipe-pack.bicep.
docs/using-resource-types.md Updates recipe pack discovery docs and example deploy commands.
docs/contributing/contributing-resource-types-recipes.md Updates repository structure diagrams and recipe-pack guidance/examples.
Data/sqlServerDatabases/README.md Updates Azure recipe pack link to azure-aks/aks-recipe-pack.bicep.
Data/redisCaches/README.md Updates Azure/Kubernetes recipe pack links to renamed pack files.
Data/postgreSqlDatabases/README.md Updates Azure recipe pack link to azure-aks/aks-recipe-pack.bicep.
Data/mySqlDatabases/README.md Updates Azure recipe pack link to azure-aks/aks-recipe-pack.bicep.
Data/mongoDatabases/README.md Updates Azure recipe pack link to azure-aks/aks-recipe-pack.bicep.
AI/search/README.md Updates Azure recipe pack link to azure-aks/aks-recipe-pack.bicep.
AI/models/README.md Updates Azure recipe pack link to azure-aks/aks-recipe-pack.bicep.
.github/workflows/release-recipe-pack.yaml Updates release workflow inputs to use azure-aks and add azure-aci.
.github/workflows/publish-bicep-recipes.yaml Publishes ACI recipes to a dedicated GHCR namespace and updates summary wording.
.github/scripts/release/build-recipe-pack-bundle.sh Updates bundling comment example to renamed Kubernetes pack filename.
.github/scripts/publish-bicep-recipe.sh Generalizes script header comment from Kubernetes-only to any Bicep recipe.
Suppressed comments (1)

docs/contributing/contributing-resource-types-recipes.md:240

  • This table example references recipe-packs/aws/eks-recipe-pack.bicep, but there is no recipe-packs/aws/ directory in this repo. That makes the example look like there is an AWS pack when there isn’t one to reference.
| AWS | recipe-packs/aws/eks-recipe-pack.bicep | ... |

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread recipe-packs/README.md Outdated
Comment on lines +5 to +6
- `<name>-recipe-pack.bicep`: declares one `Radius.Core/recipePacks` resource whose `recipes` map has an entry per Resource Type.
- `README.md`: documents the pack, its parameters, and the recipes it includes.
Comment thread docs/using-resource-types.md Outdated
Comment on lines 37 to 41
Recipe Packs live at the repository root under [`recipe-packs/`](../recipe-packs/). Each platform has its own folder containing a default Recipe Pack that can wire both Bicep and Terraform recipes:

- `azure/` — recipes for all types provisioned on Azure.
- `azure-aks/` — recipes for all types provisioned on Azure using AKS for compute.
- `azure-aci/` — recipes for all types provisioned on Azure using ACI for compute.
- `aws/` — recipes for all types provisioned on AWS.
Comment thread docs/using-resource-types.md Outdated
- `kubernetes/` — recipes for all types provisioned in-cluster on Kubernetes.

Each Recipe Pack bundles the Recipes for every Resource Type on that platform together with an Environment definition, so a platform engineer configures an Environment by deploying a single Recipe Pack instead of registering Recipes one type at a time. Cloud packs (under `azure/` and `aws/`) accept parameters for the provider configuration, such as the subscription or account the Environment provisions into.
Each Recipe Pack bundles the Recipes for every Resource Type on that platform together with an Environment definition, so a platform engineer configures an Environment by deploying a single Recipe Pack instead of registering Recipes one type at a time. Cloud packs (under `azure-aks/`, `azure-aci/`, and `aws/`) accept parameters for the provider configuration, such as the subscription or account the Environment provisions into.
Comment thread README.md Outdated
Comment on lines +40 to +45
├── aws/ # AWS recipe pack
│ ├── README.md
│ └── eks-recipepack.bicep
├── kubernetes/ # Default recipe pack (zero-config, in-cluster)
│ └── eks-recipe-pack.bicep
├── kubernetes/ # Kubernetes recipe pack (zero-config, in-cluster)
├── README.md
└── default-recipepack.bicep
└── kubernetes-recipe-pack.bicep
Comment on lines 55 to 59
├── aws/ # AWS recipe pack
│ ├── README.md
│ └──eks-recipepack.bicep
└── kubernetes/ # Default recipe pack (zero-config, in-cluster)
│ └──eks-recipe-pack.bicep
└── kubernetes/ # Kubernetes recipe pack (zero-config, in-cluster)
├── README.md
Comment on lines 272 to 273
Recipes for a Resource Type are added to the platform Recipe Packs under `recipe-packs/` at the repository root. Each platform has its own folder (`azure-aks/`, `azure-aci/`, `aws/`, and `kubernetes/`) containing a single Recipe Pack Bicep file (for example `aks-recipe-pack.bicep`) that wires both Bicep and Terraform recipes. Each Recipe Pack declares a single `Radius.Core/recipePacks` resource whose `recipes` map contains an entry for every Resource Type, plus a `Radius.Core/environments` resource that references the pack.

Signed-off-by: Zach Casper <zachcasper@microsoft.com>

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 24 out of 24 changed files in this pull request and generated no new comments.

Suppressed comments (7)

recipe-packs/README.md:6

  • The README claims each pack contains a <name>-recipe-pack.bicep file, but the packs in this repo use names like azure-aks.bicep, azure-aci.bicep, and kubernetes/default.bicep. This makes the overview inaccurate/misleading for contributors.
- `<name>-recipe-pack.bicep`: declares one `Radius.Core/recipePacks` resource whose `recipes` map has an entry per Resource Type.
- `README.md`: documents the pack, its parameters, and the recipes it includes.

recipe-packs/README.md:22

  • This step instructs contributors to name the pack file <name>-recipe-pack.bicep / <short-name>-recipe-pack.bicep, but the existing packs in this repo don’t follow that convention (e.g., azure-aks.bicep, azure-aci.bicep, default.bicep). Align the instructions with the actual naming used here (or rename the pack files).
1. **Create the folder and files.** Add `recipe-packs/<pack-name>/` with a `<name>-recipe-pack.bicep` and a `README.md`. Use a folder name that identifies the platform and, where a cloud offers more than one compute target, the compute runtime (for example `azure-aks`, `azure-aci`, `kubernetes`). Name the Bicep file `<short-name>-recipe-pack.bicep`.

docs/contributing/contributing-resource-types-recipes.md:58

  • The repository layout diagram lists an recipe-packs/aws/ folder and eks-recipe-pack.bicep, but this repository does not contain recipe-packs/aws/. The contributing guide should reflect the actual pack directories present.
    ├── aws/                          # AWS recipe pack
    │       ├── README.md
    │       └──eks-recipe-pack.bicep
    └── kubernetes/           # Kubernetes recipe pack (zero-config, in-cluster)

docs/contributing/contributing-resource-types-recipes.md:241

  • This example table references an AWS recipe pack path (recipe-packs/aws/eks-recipe-pack.bicep) that does not exist in this repository. Either remove the AWS row or adjust it to avoid pointing contributors to a non-existent file.
| Azure | recipe-packs/azure-aks/azure-aks.bicep | mcr.microsoft.com/bicep/avm/res/cache/redis-enterprise |
| AWS | recipe-packs/aws/eks-recipe-pack.bicep | ... |
| Kubernetes | recipe-packs/kubernetes/default.bicep | ghcr.io/radius-project/kube-recipes/... |

docs/using-resource-types.md:44

  • This paragraph says all packs bundle an Environment definition and that azure-aci/ accepts provider parameters, but the ACI pack intentionally does not define an Environment or parameters (it’s referenced from an existing Azure-configured Environment). The docs should reflect that distinction.
Each Recipe Pack bundles the Recipes for every Resource Type on that platform together with an Environment definition, so a platform engineer configures an Environment by deploying a single Recipe Pack instead of registering Recipes one type at a time. Cloud packs (under `azure-aks/`, `azure-aci/`, and `aws/`) accept parameters for the provider configuration, such as the subscription or account the Environment provisions into.

README.md:43

  • The repository structure diagram lists an recipe-packs/aws/ directory and eks-recipe-pack.bicep, but there is no recipe-packs/aws/ folder in this repo (only azure-aci/, azure-aks/, and kubernetes/). This makes the top-level README misleading.
    ├── aws/                            # AWS recipe pack
    │       ├── README.md
    │       └── eks-recipe-pack.bicep
    ├── kubernetes/                     # Kubernetes recipe pack (zero-config, in-cluster)

docs/contributing/contributing-resource-types-recipes.md:272

  • This paragraph states every platform folder (including azure-aci/) contains a single pack file that wires both Bicep and Terraform and that each pack declares an Environment resource. The ACI pack in this PR is intentionally pack-only (no Environment, no parameters), so the guidance is currently inaccurate.
Recipes for a Resource Type are added to the platform Recipe Packs under `recipe-packs/` at the repository root. Each platform has its own folder (`azure-aks/`, `azure-aci/`, `aws/`, and `kubernetes/`) containing a single Recipe Pack Bicep file (for example `azure-aks.bicep`) that wires both Bicep and Terraform recipes. Each Recipe Pack declares a single `Radius.Core/recipePacks` resource whose `recipes` map contains an entry for every Resource Type, plus a `Radius.Core/environments` resource that references the pack.

Signed-off-by: Zach Casper <zachcasper@microsoft.com>
@brooke-hamilton

Copy link
Copy Markdown
Member

This is waiting on the current release to finish.

@zachcasper zachcasper closed this Aug 18, 2026
@zachcasper
zachcasper deleted the aci-recipe-pack branch August 18, 2026 19:45
@zachcasper
zachcasper restored the aci-recipe-pack branch August 19, 2026 17:16
@zachcasper zachcasper reopened this Aug 19, 2026
@DariuszPorowski
DariuszPorowski requested a balanced review from Copilot August 20, 2026 15:59

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 24 out of 24 changed files in this pull request and generated 1 comment.

Suppressed comments (3)

recipe-packs/azure-aks/azure-aks.bicep:30

  • Renaming this symbolic resource leaves the Environment at line 377 referencing recipes.id, which is now undefined, so this pack no longer compiles. Either update that reference too or retain the existing symbolic name; the latter is a local fix here.
    recipe-packs/azure-aks/README.md:7
  • The renamed template still declares and configures a Radius.Core/environments resource at lines 364–380. Omitting that side effect from the file description can lead users to deploy it expecting only recipe registration, even though it also updates the selected Environment.
    recipe-packs/kubernetes/README.md:7
  • The template still declares the env resource at lines 56–68, so deploying it also creates or updates the Environment and associates this pack. The new description incorrectly hides that operational side effect.
| `default.bicep` | Recipe Pack wiring the Bicep recipes for all Kubernetes-provisioned types. |

recipes: {
'Radius.Compute/containers': {
kind: 'bicep'
source: 'ghcr.io/radius-project/azure-aci-recipes/containers:latest'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants